# --------------------------------------------------
# -*- coding: utf-8 -*-
# Time: 2023/2/14 15:08
# Author: 沈凌鹏
# Version: 1.0
# File: Main.py
# Description: 用于执行游戏主流程
# --------------------------------------------------
# 请用程序实现一个“点球大战”文字游戏
# 1.判断进球
# 玩家通过输入1~3三个数字分别对应左、中、右三个方向，同时电脑也会随机一个方向，如果两个方向不同则认定为进球，罚球方得1分，否则不得分
# 2.轮次
# 玩家和电脑轮流作为罚球方，默认各有5次罚球机会。如果5轮结束后打平，则继续轮流罚球，直到出现一方罚进、另一方未罚进，比赛结束
# 如果在5轮中，一方的领先分数已超过另一方的剩余罚球机会，则比赛提前结束
# 3.扩展功能
# 1）5次游戏后，5个玩家的净胜球排名（即预先设置共5名玩家）

# 引入第三方库colorama用来改变控制台输出内容颜色
import codecs, colorama
import Rule.Rule as game_rule

# 用字典保存净胜球数据
Goal_difference = {}

# 循环五次代表五位玩家进行游戏
for i in range(5):
    print("玩家", i + 1, "开始罚球")
    point = 0  # 净胜球分数
    j = 0  # 确保在输入错误内容后可以重新循环一次
    player_point = 0  # 玩家得分
    npc_point = 0  # NPC得分
    player_turn = 5  # 玩家罚球次数
    npc_turn = 5  # npc罚球次数
    # 玩家与NPC各进行五次游戏
    while j < 10:
        win = 0  # 查看该轮是否进球
        try:
            # 每轮比赛开始前判断一方领先分数是否已超过另一方的剩余罚球机会
            if npc_turn != 0 and player_turn != 0 and (
                    player_point - npc_point > npc_turn or npc_point - player_point > player_turn):
                print("比赛提前结束")
                break
            j = j + 1
            if j % 2 == 1:
                # 我方罚球,选择踢球方向，我方回合显示蓝色
                choose = int(input(colorama.Fore.BLUE + "请选择踢球方向：1.左 2.中 3.右 4.退出\n"))
                player_turn = player_turn - 1
                flag = 1
            else:
                # npc罚球,选择守球方向，npc回合显示白色
                choose = int(input(colorama.Fore.RESET + "请选择守球方向：1.左 2.中 3.右 4.退出\n"))
                npc_turn = npc_turn - 1
                flag = 0

            # 左边
            if choose == 1:
                game_start = game_rule.GameRule(1)
                # 罚球是否进球
                win = game_start.rule1()
                # 计算净胜球得分
                if flag == 1:
                    point = point + win
                # 计算玩家得分与npc得分
                player_point = game_start.player_rule(flag, win, player_point)
                npc_point = game_start.npc_rule(flag, win, npc_point)

            # 中间
            elif choose == 2:
                game_start = game_rule.GameRule(1)
                # 罚球是否进球
                win = game_start.rule1()
                # 计算净胜球得分
                if flag == 1:
                    point = point + win
                # 计算玩家得分与npc得分
                player_point = game_start.player_rule(flag, win, player_point)
                npc_point = game_start.npc_rule(flag, win, npc_point)

            # 右边
            elif choose == 3:
                game_start = game_rule.GameRule(1)
                # 罚球是否进球
                win = game_start.rule1()
                # 计算净胜球得分
                if flag == 1:
                    point = point + win
                # 计算玩家得分与npc得分
                player_point = game_start.player_rule(flag, win, player_point)
                npc_point = game_start.npc_rule(flag, win, npc_point)

            # 退出游戏
            elif choose == 4:
                print("游戏结束")
                break

            else:
                j = j - 1
                print("请输入正确的选项")

        # 捕捉不正确的输入内容
        except ValueError:
            j = j - 1  # 输入错误内容后重新踢一次
            print("请输入正确的选项")
        # 双方平手，在进行一轮
        if player_point == npc_point and player_turn == npc_turn == 0:
            j = j - 1
            print("双方平手，延长赛")

    # 将每位玩家的净胜球数记录到字典内
    Goal_difference.update({str(i + 1) + "号玩家": point})
    print(Goal_difference)

# 对字典进行从高到低排序
sort_list = sorted(Goal_difference.items(), key=lambda item: item[1], reverse=True)
with codecs.open("PointList.txt", 'a', encoding="utf-8") as fp:
    fp.write("罚球比赛净胜球得分排名如下：\n")
    k = 0
    for k in range(5):
        fp.write(str(sort_list[k]) + "\n")
        k = k + 1
    fp.write("\n")

print(sort_list)
